home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / tty_ldisc.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  6KB  |  155 lines

  1. #ifndef _LINUX_TTY_LDISC_H
  2. #define _LINUX_TTY_LDISC_H
  3.  
  4. /*
  5.  * This structure defines the interface between the tty line discipline
  6.  * implementation and the tty routines.  The following routines can be
  7.  * defined; unless noted otherwise, they are optional, and can be
  8.  * filled in with a null pointer.
  9.  *
  10.  * int    (*open)(struct tty_struct *);
  11.  *
  12.  *     This function is called when the line discipline is associated
  13.  *     with the tty.  The line discipline can use this as an
  14.  *     opportunity to initialize any state needed by the ldisc routines.
  15.  * 
  16.  * void    (*close)(struct tty_struct *);
  17.  *
  18.  *    This function is called when the line discipline is being
  19.  *     shutdown, either because the tty is being closed or because
  20.  *     the tty is being changed to use a new line discipline
  21.  * 
  22.  * void    (*flush_buffer)(struct tty_struct *tty);
  23.  *
  24.  *     This function instructs the line discipline to clear its
  25.  *     buffers of any input characters it may have queued to be
  26.  *     delivered to the user mode process.
  27.  * 
  28.  * ssize_t (*chars_in_buffer)(struct tty_struct *tty);
  29.  *
  30.  *     This function returns the number of input characters the line
  31.  *    discipline may have queued up to be delivered to the user mode
  32.  *    process.
  33.  * 
  34.  * ssize_t (*read)(struct tty_struct * tty, struct file * file,
  35.  *           unsigned char * buf, size_t nr);
  36.  *
  37.  *     This function is called when the user requests to read from
  38.  *     the tty.  The line discipline will return whatever characters
  39.  *     it has buffered up for the user.  If this function is not
  40.  *     defined, the user will receive an EIO error.
  41.  * 
  42.  * ssize_t (*write)(struct tty_struct * tty, struct file * file,
  43.  *             const unsigned char * buf, size_t nr);
  44.  *
  45.  *     This function is called when the user requests to write to the
  46.  *     tty.  The line discipline will deliver the characters to the
  47.  *     low-level tty device for transmission, optionally performing
  48.  *     some processing on the characters first.  If this function is
  49.  *     not defined, the user will receive an EIO error.
  50.  * 
  51.  * int    (*ioctl)(struct tty_struct * tty, struct file * file,
  52.  *          unsigned int cmd, unsigned long arg);
  53.  *
  54.  *    This function is called when the user requests an ioctl which
  55.  *     is not handled by the tty layer or the low-level tty driver.
  56.  *     It is intended for ioctls which affect line discpline
  57.  *     operation.  Note that the search order for ioctls is (1) tty
  58.  *     layer, (2) tty low-level driver, (3) line discpline.  So a
  59.  *     low-level driver can "grab" an ioctl request before the line
  60.  *     discpline has a chance to see it.
  61.  * 
  62.  * void    (*set_termios)(struct tty_struct *tty, struct termios * old);
  63.  *
  64.  *     This function notifies the line discpline that a change has
  65.  *     been made to the termios structure.
  66.  * 
  67.  * int    (*poll)(struct tty_struct * tty, struct file * file,
  68.  *           poll_table *wait);
  69.  *
  70.  *     This function is called when a user attempts to select/poll on a
  71.  *     tty device.  It is solely the responsibility of the line
  72.  *     discipline to handle poll requests.
  73.  *
  74.  * void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
  75.  *                char *fp, int count);
  76.  *
  77.  *     This function is called by the low-level tty driver to send
  78.  *     characters received by the hardware to the line discpline for
  79.  *     processing.  <cp> is a pointer to the buffer of input
  80.  *     character received by the device.  <fp> is a pointer to a
  81.  *     pointer of flag bytes which indicate whether a character was
  82.  *     received with a parity error, etc.
  83.  * 
  84.  * int    (*receive_room)(struct tty_struct *);
  85.  *
  86.  *     This function is called by the low-level tty driver to
  87.  *     determine how many characters the line discpline can accept.
  88.  *     The low-level driver must not send more characters than was
  89.  *     indicated by receive_room, or the line discpline may drop
  90.  *     those characters.
  91.  * 
  92.  * void    (*write_wakeup)(struct tty_struct *);
  93.  *
  94.  *     This function is called by the low-level tty driver to signal
  95.  *     that line discpline should try to send more characters to the
  96.  *     low-level driver for transmission.  If the line discpline does
  97.  *     not have any more data to send, it can just return.
  98.  *
  99.  * int (*hangup)(struct tty_struct *)
  100.  *
  101.  *    Called on a hangup. Tells the discipline that it should
  102.  *    cease I/O to the tty driver. Can sleep. The driver should
  103.  *    seek to perform this action quickly but should wait until
  104.  *    any pending driver I/O is completed.
  105.  */
  106.  
  107. #include <linux/fs.h>
  108. #include <linux/wait.h>
  109.  
  110. struct tty_ldisc {
  111.     int    magic;
  112.     char    *name;
  113.     int    num;
  114.     int    flags;
  115.     
  116.     /*
  117.      * The following routines are called from above.
  118.      */
  119.     int    (*open)(struct tty_struct *);
  120.     void    (*close)(struct tty_struct *);
  121.     void    (*flush_buffer)(struct tty_struct *tty);
  122.     ssize_t    (*chars_in_buffer)(struct tty_struct *tty);
  123.     ssize_t    (*read)(struct tty_struct * tty, struct file * file,
  124.             unsigned char __user * buf, size_t nr);
  125.     ssize_t    (*write)(struct tty_struct * tty, struct file * file,
  126.              const unsigned char * buf, size_t nr);    
  127.     int    (*ioctl)(struct tty_struct * tty, struct file * file,
  128.              unsigned int cmd, unsigned long arg);
  129.     void    (*set_termios)(struct tty_struct *tty, struct termios * old);
  130.     unsigned int (*poll)(struct tty_struct *, struct file *,
  131.                  struct poll_table_struct *);
  132.     int    (*hangup)(struct tty_struct *tty);
  133.     
  134.     /*
  135.      * The following routines are called from below.
  136.      */
  137.     void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
  138.                    char *fp, int count);
  139.     int    (*receive_room)(struct tty_struct *);
  140.     void    (*write_wakeup)(struct tty_struct *);
  141.  
  142.     struct  module *owner;
  143.     
  144.     int refcount;
  145. };
  146.  
  147. #define TTY_LDISC_MAGIC    0x5403
  148.  
  149. #define LDISC_FLAG_DEFINED    0x00000001
  150.  
  151. #define MODULE_ALIAS_LDISC(ldisc) \
  152.     MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
  153.  
  154. #endif /* _LINUX_TTY_LDISC_H */
  155.